#pragma once
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <string>


class InetAddr{
public:
    InetAddr(struct sockaddr_in& client, int socket_fd)
        :_addr(client),
        _port(ntohs(client.sin_port)),
        _ip(inet_ntoa(client.sin_addr)),
        _socket_fd(socket_fd)
    {}

    ~InetAddr(){}

    bool operator==(const InetAddr& inet_addr) const{
        return _port == inet_addr._port && _ip == inet_addr._ip;
    }

    uint16_t GetPort() const {return _port;}

    std::string GetIp() const {return _ip;}

    //添加了socket(服务器端使用)描述符后，也需要想办法获得
    int GetSocket_fd() const {return _socket_fd;}

//为了方便得到一个关于客户端的ip + port的一个标准形式：[ip : port]
    std::string GetFormatStr() const{
        std::string str;
        str = str + "[" + _ip + " : " + std::to_string(_port) + "] ";
        return str;
    }

//发送的时候，需要传入一个结构体，所以这里也要进行操作
    const struct sockaddr_in& GetSockAddr_in() const {return _addr;}

private:
    struct sockaddr_in _addr;
    uint16_t _port;
    std::string _ip;
    int _socket_fd;
};